package net.maku.tencentsms.service;

import com.tencentcloudapi.common.Credential;
import com.tencentcloudapi.common.exception.TencentCloudSDKException;
import com.tencentcloudapi.common.profile.ClientProfile;
import com.tencentcloudapi.common.profile.HttpProfile;
import com.tencentcloudapi.sms.v20210111.SmsClient;
import com.tencentcloudapi.sms.v20210111.models.SendSmsRequest;
import com.tencentcloudapi.sms.v20210111.models.SendSmsResponse;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.stereotype.Component;

@Component
public class TencentSmsService {

    @Value("${tencent.sms.secretId}")
    private String secretId;

    @Value("${tencent.sms.secretKey}")
    private String secretKey;

    @Value("${tencent.sms.sdkAppId}")
    private String sdkAppId;

    @Value("${tencent.sms.templateId}")
    private String templateId;

    @Value("${tencent.sms.signName}")
    private String signName;

    @Value("${tencent.sms.region}")
    private String region;

    public String sendSms(String phoneNumber, String[] templateParams) {
        try {
            // 实例化一个认证对象，入参需要传入腾讯云账户 SecretId 和 SecretKey
            Credential cred = new Credential(secretId, secretKey);

            // 实例化一个 HTTP 选项，可选，没有特殊需求可以跳过
            HttpProfile httpProfile = new HttpProfile();
            httpProfile.setEndpoint("sms.tencentcloudapi.com");  // 固定短信服务的 endpoint，也可使用 sms.ap-guangzhou.tencentcloudapi.com

            // 实例化一个 ClientProfile，可选，没有特殊需求可以跳过
            ClientProfile clientProfile = new ClientProfile();
            clientProfile.setHttpProfile(httpProfile);

            // 实例化要请求产品的 client 对象，clientProfile 是可选的
            SmsClient client = new SmsClient(cred, region, clientProfile);

            // 实例化一个请求对象，每个接口都会对应一个 request 对象
            SendSmsRequest req = new SendSmsRequest();

            // 设置短信相关参数
            req.setPhoneNumberSet(new String[]{"+86" +phoneNumber});  // 接收短信的手机号码，格式需带国家码，如 +8613800138000
            req.setSmsSdkAppId(sdkAppId);
            req.setSignName(signName);
            req.setTemplateId(templateId);
            req.setTemplateParamSet(templateParams);  // 模板参数，如验证码等，按模板定义的参数顺序传入

            // 调用发送短信的接口
            SendSmsResponse resp = client.SendSms(req);

            // 返回短信发送结果，可根据实际需求处理返回内容
            return SendSmsResponse.toJsonString(resp);
        } catch (TencentCloudSDKException e) {
            // 捕获异常并处理，可记录日志等
            e.printStackTrace();
            return "短信发送失败：" + e.getMessage();
        }
    }
}
